from django.shortcuts import render, redirect
from django.contrib.auth import logout, authenticate, login
from django.contrib import messages
from django.conf import settings

def forgot_password_view(request):
    """忘记密码页面（演示功能）
    
    注意：这是演示版本，仅用于界面展示，不包含实际的密码重置邮件发送功能。
    在生产环境中，应该：
    1. 生成安全的密码重置令牌
    2. 将令牌存储在数据库中（通常使用Django的内置PasswordResetView）
    3. 发送包含重置链接的实际邮件
    """
    if request.method == 'POST':
        # 演示版本：不实际发送邮件，仅检查用户是否存在
        messages.success(request, '重置密码功能暂未实现，这是演示版本。请使用管理员提供的密码。')
        return redirect('portal:login')
    
    return render(request, 'portal/forgot_password.html')


def login_view(request):
    """自定义登录页面
    
    提供现代化的登录界面，支持用户名和密码登录，
    包含表单验证和错误提示
    """
    if request.user.is_authenticated:
        return redirect('portal:home')
        
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            messages.success(request, '登录成功！')
            return redirect('portal:home')
        else:
            messages.error(request, '用户名或密码错误，请重试。')
            
    # 确保传递request对象给模板渲染，以支持CSRF保护
    return render(request, 'portal/login.html', {})


def home(request):
    """首页

    - 未登录：展示使用 Admin 登录按钮
    - 已登录：展示用户名、进入后台与退出登录入口
    """
    context = {
        "is_authenticated": request.user.is_authenticated,
        "username": request.user.username if request.user.is_authenticated else "",
    }
    return render(request, "portal/home.html", context)


def runoob(request):
    """演示页：渲染简单示例文本"""
    views_name = "演示页"
    return render(request, "portal/runoob.html", {"name": views_name})


def ui_demo(request):
    """UI组件展示页面：展示所有可用的UI组件和交互效果"""
    return render(request, "portal/ui_demo.html")

def logout_view(request):
    """登出并跳转到登录页（允许 GET），避免 Admin 登出需要 POST 导致 405"""
    logout(request)
    return redirect('portal:login')

def page_not_found_view(request, exception):
    """自定义404页面处理视图
    
    提供友好的404错误页面，显示请求的路径
    并提供返回首页的链接
    """
    context = {
        'request_path': request.path
    }
    return render(request, 'portal/404.html', context, status=404)
